// 基于 wx.request 的封装 (uniapp 也兼容)
const targetUrl = "http://kfb65863.natappfree.cc"

/**
 * 核心请求方法
 * @param {Object} options 
 * @returns {Promise}
 */
const request = ({
  url,
  method = 'GET',
  data = {},
  header = {}
}) => {
  // 获取 token（同步）
  const token = uni.getStorageSync("token")
  
  // 构造请求头
  const headers = {
    'Content-Type': 'application/json;charset=utf-8',
    ...header
  }
  
  // 注入 token
  if (token) {
    headers['authorization'] =  token
  }

  // 处理 GET 请求参数
  if (method.toUpperCase() === 'GET' && data) {
    url += '?' + Object.keys(data)
      .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`)
      .join('&')
  }

  return new Promise((resolve, reject) => {
    wx.request({
      url: targetUrl + url,
      method: method.toUpperCase(),
      data: method.toUpperCase() !== 'GET' ? data : {},
      header: headers,
      success: (res) => {
        // 状态码 2xx 视为成功
        if (res.statusCode >= 200 && res.statusCode < 300) {
          handleResponse(res.data, resolve, reject)
        } else {
          reject(createError(res))
        }
      },
      fail: (err) => {
        reject(createError(err))
      }
    })
  })
}

// 响应处理
const handleResponse = (data, resolve, reject) => {
  if (data.code === 200) {
    resolve(data)
  } else if (data.code === 401) {
    // 可在这里触发登录跳转
    console.warn('未授权:', data.msg)
    resolve(data) // 仍返回数据由业务层处理
  } else {
    console.error('业务错误:', data.msg)
    resolve(data) // 保持与 axios 版本相同的行为
  }
}

// 构造错误对象
const createError = (error) => {
  if (error.statusCode) {
    return {
      message: `请求错误: ${error.statusCode}`,
      data: error.data,
      status: error.statusCode
    }
  }
  return {
    message: error.errMsg || '网络连接失败',
    data: null,
    status: 0
  }
}

/**
 * 快捷方法
 */
export const get = (url, params = {}) => request({ url, method: 'GET', data: params })
export const post = (url, data = {}) => request({ url, method: 'POST', data })

export default request